home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er
/
64ER_CD.iso
/
84xx
/
8412.d64
/
trace assemble
(
.txt
)
< prev
Wrap
Commodore BASIC
|
1995-03-30
|
9KB
|
227 lines
80 OPEN1,4
90 SYS9*4096
100 *=49152
110 ;:;:;TRACE / SINGLE STEP FUER C64 9.84
120 ;:; +DISASSEMBLER / EDITOR
130 ;:; JUERGEN (null)EBEL:;:; 8 MUENCHEN 82:;:; GROSCHENWEG 19:;:;
140 ;:; TEL. 089 / 432709:;:;
150 .OPT OO,P
160 IRQVEK =$314:STACK =$100:COL =55296;HINTERGRUNDFARBE
170 SCREEN =1024:READY =$A474-1
180 CIA =$DC00:TL =CIA+6;TIMERWERTE:TH =CIA+7:TAST =$EA87;TASTATURROUT.
190 DDRB =$DD03
200 ICR =CIA+13;INTERR.CONTROLREG.:CRB =CIA+15:TSTART =*+$0500
210 NOP:LDA #0:STA DISON:BEQ (null)
220 LDA #255:STA DISON
230 (null) SEI:LDA #<TRACE:STA IRQVEK;IRQ VEKTOR
240 LDA #>TRACE:STA IRQVEK+1;AUF TRACE
250 LDA #130:STA ICR;TIMER B INTERRUPT ERLAUBT:LDX #255:TXS;STACK INITIAL.
260 LDA #>READY;STACK FUER TRACE:PHA;VORBEREITEN:LDA #<READY:PHA
270 LDA #$C0;PC=$C000:PHA:LDA #0:PHA
280 LDA #32:PHA:LDA #0:PHA:PHA:PHA
290 TRACE CLD:LDY #0:TITEL LDA TEXT,Y;KOPFZEILE
300 JSR PRIZEI;AUSGEBEN:CPY #40:BNE TITEL
310 TSX:LDA STACK+6,X;PC AUSGEBEN:STA TMP+3:JSR PRBYTE
320 LDA STACK+5,X:STA TMP+4:JSR PRBYTE
330 LDA DISON:BMI DISOFF
340 JSR DISAS:DISOFF JSR SPACE:TXA;SP AUSGEBEN
350 JSR PRBYTE
360 REGISTER JSR SPACE:LDA STACK+1,X:JSR PRBYTE
370 INX:CPY #56:BCC REGISTER:JSR SPACE
380 LDA STACK+1,X;PROZESSORSTATUS-FLAGS ANZEIGEN
390 LDX #8
400 CONT1 ASL:PHA:LDA #94;PFEIL:BCS FLSETZ
410 LDA #45;MINUS:FLSETZ JSR PRIZEI:PLA
420 DEX:BNE CONT1:JSR SPACE:LDX #8;USERPORT ANZEIGEN
430 LDA DDRB-2
440 CONT2 ASL:PHA:LDA #$31:BCS USETZ
450 LDA #$30:USETZ JSR PRIZEI:PLA
460 DEX:BNE CONT2:LDX #8;DATENRICHTUNGSREGISTER:LDA DDRB;LADEN
470 CONT3 ASL SCREEN+65,X:LSR;ENTSPRECHENDE BITS DER ANZEIGE
480 ROR SCREEN+65,X;WERDEN INVERTIERT:DEX:BNE CONT3
490 WAIT JSR GET;WARTET AUF:CMP #23;F1,F3,F5,F7 ODER X:BEQ EXIT
500 CMP #5:BEQ FAST;UND VERZWEIGT ENTSPRECHEND
510 CMP #6:BEQ SLOW
520 CMP #3:BEQ WAITL:CMP #4:BNE WAIT
530 JMP SET
540 WAITL JSR GET;WARTET BIS F7 WIEDER LOSGELASSEN:CMP #64:BNE WAITL
550 FAST LDA #$16:STA TL
560 LDA #0;TIMER LADEN:STA TH:LDA #17:STA CRB;UND STARTEN:LDA $DC0D;ENDE IRQ
570 PLA:TAY:PLA:TAX
580 PLA:RTI
590 SLOW LDX #0:CONT4 DEX:BNE CONT4:DEY:BNE CONT4
600 BEQ FAST
610 EXIT LDA #2;X TASTE:STA ICR:LDA #$31:STA IRQVEK;SETZT IRQ VEKTOR AUF
620 LDA #$EA;ALTEN WERT:STA IRQVEK+1:LDA #4:STA $028B:LDA #16;REPEAT KORRIG.
630 STA $028C:CLI:JMP READY+1;SPRUNG ZU BASIC
640 PRBYTE PHA;1 BYTE ALS 2 HEXZ. AUF SCHIRM:STX TMP:LSR:LSR:LSR:LSR
650 TAX:LDA HEX,X:JSR PRIZEI
660 PLA:AND #$0F:TAX:LDA HEX,X:LDX TMP
670 JMP PRIZEI
680 SPACE LDA #$20
690 PRIZEI AND #$3F;WEGEN BILDSCHIRMCODE
700 STA SCREEN,Y:LDA #1;FARBE SETZEN:STA COL,Y:INY:RTS
710 GET JSR TAST;HOLT TASTENCODE:LDA $CB:RTS
720 SET JSR DISAS:LDY #40;F1 TASTE
730 START LDA SCREEN,Y:ORA #128:STA SCREEN,Y:STY TMP
740 JSR ZEICHHOL;EINGABEROUT.:LDY TMP:CMP #13:BNE LINKS
750 CPY #100:BPL MREAD:JMP READ:MREAD RTS;ZUR LESEROUTINE
760 REVERSE LDA SCREEN,Y;INVERTIEREN
770 AND #127:STA SCREEN,Y:RTS
780 LINKS CMP #17;CURSOR LINKS:BNE RECHTS:JSR REVERSE:DEY:BNE START
790 RECHTS CMP #29;CURSOR RECHTS:BNE CONT6:JSR REVERSE:INY:BNE START
800 CONT6 JSR PRIZEI;WERT ANZEIGEN:BNE START:ZEICHHOL LDA #0;TAST.ABFRAGE
810 STA $C6:JSR TAST:LDA $277
820 CMP #0:BEQ ZEICHHOL:LDY #0:STY $277;TASTATURPUFFERSTART
830 CMP #$85;F1 TASTE:BEQ ZEICHHOL
840 LDY #64;VERZOEGERUNG REPEATZAEHLER:STY $28B:STY $28C:RTS
850 READ JSR REVERSE:LDY #40;PC LESEN:TSX:JSR BYT:STA STACK+6,X
860 STA TMP+3:INY:JSR BYT
870 STA STACK+5,X:STA TMP+4:INY:INY;SP UEBERLESEN:INY:INY
880 LOOP INY;REGISTER LESEN:JSR BYT:STA STACK+1,X:INY:INX
890 CPY #56:BNE LOOP
900 INY:LDA #0:STA TMP:LOOP1 LDA SCREEN,Y;FLAGS LESEN:AND #%00011111
910 CMP #30:ROL TMP
920 INY:CPY #65:BNE LOOP1:TSX:LDA TMP:AND #%11111011;I FLAG LOESCHEN
930 STA STACK+4,X:JSR DISAS:JSR READPC:JSR DISAS:JMP WAIT
940 BYT JSR LBIT;8 BIT ZAHL VON SCREEN HOLEN:ASL:ASL:ASL:ASL:INY:STA TMP
950 JSR LBIT:CLC:ADC TMP:RTS
960 LBIT LDA SCREEN,Y;1 BYTE VON SCREEN IN HEX:CMP #48:BCS ZAHL:ADC #57
970 SEC:ZAHL SBC #48:RTS
980 ;BERECHNET ABS. ADRESSEN BEI BRANCHES
990 OFFSET LDA COD2:BMI BMINUS
1000 CLC;BRANCH VOR:ADC #2:ADC TMP+4:STA TMP1:LDA TMP+3
1010 ADC #0:JSR PRBYTE:LDA TMP1:JSR PRBYTE:RTS:;BRANCH RUECK
1020 BMINUS EOR #255:SEC:SBC #1:STA TMP
1030 LDA TMP+4:SBC TMP:STA TMP1:LDA TMP+3
1040 SBC #0:JSR PRBYTE:LDA TMP1:JSR PRBYTE:RTS;ENDE OFFSET
1050 ;LAENGE OPCODE
1060 ;BERECHNET BEFEHLSLAENGE (1,2 OD. 3 BYTES)
1070 ;OPCODE IN AKKU UEBERGEBEN
1080 ;IM Y-REG. STEHT DANN BEFEHLSLAENGE
1090 LAENGE LDY #1
1100 CMP #$20:BEQ LOO1:AND #$9F:BEQ LOO3
1110 AND #$1F:CMP #9:BEQ LOO2:CMP #$19
1120 BEQ LOO1:AND #$0D:CMP #8:BEQ LOO3
1130 AND #8:BEQ LOO2
1140 LOO1 INY:LOO2 INY:LOO3 RTS
1150 DISAS STY OLDY:STX OLDX;REGISTER RETTEN
1160 LDX #20:LDA #" ":CLE1 STA SCREEN+120,X;ZEILE FUER DISAS. LOESCHEN
1170 DEX:BNE CLE1
1180 ;PC L/H IN TMP+4 / TMP+3:;BELEGT 'RAM' POINTER ZUM LESEN
1190 LDA TMP+4:STA PPOIN1+1:STA TMP+6 :LDA TMP+3:STA PPOIN1+2:STA TMP+5
1200 INC TMP+6:LDA TMP+6:STA PPOIN2+1:BNE LOO5
1210 INC TMP+5:LOO5 LDA TMP+5:STA PPOIN2+2:INC TMP+6
1220 LDA TMP+6:STA PPOIN3+1:BNE LOO6
1230 INC TMP+5:LOO6 LDA TMP+5:STA PPOIN3+2
1240 PPOIN1 LDA $C000:STA COD1;LIEST OPCODES
1250 PPOIN2 LDA $C000:STA COD2
1260 PPOIN3 LDA $C000:STA COD3
1270 LDA COD1:JSR LAENGE:TYA:STA CODEL:TAX:LDY #120;BYTES AB PC AUSGEBEN
1280 LDA COD1:JSR PRBYTE:JSR SPACE:DEX
1290 BEQ LOO7:LDA COD2:JSR PRBYTE:JSR SPACE
1300 DEX:BEQ LOO7:LDA COD3:JSR PRBYTE
1310 LOO7 LDY #129:LDA COD1;GIBT OPCODE (3 BUCHSTABEN) AUS
1320 CLC:LDA #>TSTART:STA TMP:LDA COD1:ADC COD1:BCC LOO8
1330 INC TMP:LOO8 CLC:ADC COD1:BCC LOO9:INC TMP:LOO9 STA OPP+1;POINTER BELEGEN
1340 LDA TMP:STA OPP+2:LDX #0:OPP LDA $C000,X:JSR PRIZEI:INX
1350 CPX #3:BNE OPP:JSR SPACE
1360 LDA CODEL:CMP #2:BPL CODE2:JMP ENDAS
1370 CODE2 LDX COD1:LDA TADR,X;ADRESS. FESTSTELLEN:TAX
1380 ; '#$','$' OD.'($' AUSGEBEN
1390 CPX #6:BMI LOO10:LDA #"(":JSR PRIZEI
1400 LOO10 CPX #2:BNE LOO11:LDA #"#"
1410 JSR PRIZEI:LOO11 LDA #"$":JSR PRIZEI
1420 CPX #1:BPL LOO12:JSR OFFSET:JMP ENDAS
1430 LOO12 LDA CODEL;OPERANDEN AUSGEBEN:CMP #3:BEQ CODL3
1440 LDA COD2:JSR PRBYTE:JMP LOO13
1450 CODL3 LDA COD3:JSR PRBYTE:LDA COD2:JSR PRBYTE
1460 LOO13 CPX #4:BMI ENDAS
1470 ; ',X',',Y',',X)','),Y' OD. ')' AUSGEBEN
1480 BNE LOO14:LDA #",":JSR PRIZEI
1490 LDA #"X":JSR PRIZEI:JMP ENDAS
1500 LOO14 CPX #5:BNE LOO15
1510 LDA #",":JSR PRIZEI:LDA #"Y":JSR PRIZEI:JMP ENDAS
1520 LOO15 CPX #6:BNE LOO16:LDA #",":JSR PRIZEI
1530 LDA #"X":JSR PRIZEI:LDA #")":JSR PRIZEI:JMP ENDAS
1540 LOO16 LDA #")":JSR PRIZEI
1550 CPX #8:BEQ ENDAS:LDA #",":JSR PRIZEI
1560 LDA #"Y":JSR PRIZEI
1570 ENDAS LDY OLDY;REG. HOLEN:LDX OLDX:RTS;ENDE DISAS
1580 READPC LDY #120:JSR START;DIS.ZEILE EDIT.:JSR REVERSE:LDY #120
1590 ;LIEST BYTES UND SPEICHERT IN RAM
1600 JSR BYT:STA COD1:INY:INY:JSR BYT
1610 STA COD2:INY:INY:JSR BYT:STA COD3
1620 LDA TMP+4:STA PREAD1+1
1630 LDA TMP+3:STA PREAD1+2:LDA COD1:PREAD1 STA $C000
1640 LDY CODEL:CPY #2:BMI EREAD
1650 LDA TMP+4:CLC:ADC #1:STA PREAD2+1
1660 LDA TMP+3:ADC #0:STA PREAD2+2
1670 LDA COD2:PREAD2 STA $C000
1680 CPY #3:BMI EREAD
1690 LDA TMP+4:CLC:ADC #2:STA PREAD3+1
1700 LDA TMP+3:ADC #0:STA PREAD3+2
1710 LDA COD3:PREAD3 STA $C000
1720 EREAD RTS;ALLE BYTES GELESEN. ENDE READPC
1730 TEXT .ASC " PC SP YR XR AC NV-BDIZC 76543210 "
1740 HEX .ASC "0123456789ABCDEF"
1750 TMP .BYT 0,0,0,0,0,0,0;ARBEITSVARIABLEN
1760 TMP1 .BYT 0
1770 OLDY .BYT 0
1780 OLDX .BYT 0
1790 COD1 .BYT 0:COD2 .BYT 0:COD3 .BYT 0
1800 CODEL .BYT 0:DISON .BYT 0
1810 *=TSTART:;TAB. OPCODES (L-BYTE TSTART MUSS 0 SEIN)
1820 .ASC "BRKORA?????????ORAASL???PHPORAASL"
1830 .ASC "??????ORAASL???BPLORA??????"
1840 .ASC "???ORAASL???CLCORA?????????"
1850 .ASC "ORAASL???JSRAND??????BITAND"
1860 .ASC "ROL???PLPANDROL???BITANDROL"
1870 .ASC "???BMIAND?????????ANDROL???"
1880 .ASC "SECAND?????????ANDROL???RTI"
1890 .ASC "EOR?????????EORLSR???PHAEOR"
1900 .ASC "LSR???JMPEORLSR???BVCEOR???"
1910 .ASC "??????EORLSR???CLIEOR??????"
1920 .ASC "???EORLSR???RTSADC?????????"
1930 .ASC "ADCROR???PLAADCROR???JMPADC"
1940 .ASC "ROR???BVSADC?????????ADCROR"
1950 .ASC "???SEIADC?????????ADCROR???"
1960 .ASC "???STA??????STYSTASTX???DEY"
1970 .ASC "???TXA???STYSTASTX???BCCSTA"
1980 .ASC "??????STYSTASTX???TYASTATXS"
1990 .ASC "??????STA??????LDYLDALDX???"
2000 .ASC "LDYLDALDX???TAYLDATAX???LDY"
2010 .ASC "LDALDX???BCSLDA??????LDYLDA"
2020 .ASC "LDX???CLVLDATSX???LDYLDALDX"
2030 .ASC "???CPYCMP??????CPYCMPDEC???"
2040 .ASC "INYCMPDEX???CPYCMPDEC???BNE"
2050 .ASC "CMP?????????CMPDEC???CLDCMP"
2060 .ASC "?????????CMPDEC???CPXSBC???"
2070 .ASC "???CPXSBCINC???INXSBCNOP???"
2080 .ASC "CPXSBCINC???BEQSBC?????????"
2090 .ASC "SBCINC???SEDSBC?????????SBC"
2100 .ASC "INC???"
2110 ;TABELLE ADRESSIERUNG (KEINE STANDARDWERTE NUR FUER DISAS)
2120 TADR .BYT 1,6,1,1,1,3,3,1,1,2,1,1
2130 .BYT 1,3,3,1,0,7,1,1,1,4,4,1,1,5
2140 .BYT 1,1,1,4,4,1,3,6,1,1,3,3,3,1
2150 .BYT 1,2,1,1,3,3,3,1,0,7,1,1,1,4
2160 .BYT 4,1,1,5,1,1,1,4,4,1,1,6,1,1
2170 .BYT 1,3,3,1,1,2,1,1,3,3,3,1,0,7
2180 .BYT 1,1,1,4,4,1,1,5,1,1,1,4,4,1
2190 .BYT 1,6,1,1,1,3,3,1,1,2,1,1,8,3
2200 .BYT 3,1,0,7,1,1,1,4,4,1,1,5,1,1,1
2210 .BYT 4,4,1,1,6,1,1,3,3,3,1,1,1,1
2220 .BYT 1,3,3,3,1,0,7,1,1,4,4,5,1,1
2230 .BYT 5,1,1,1,4,1,1,2,6,2,1,3,3,3
2240 .BYT 1,1,2,1,1,3,3,3,1,0,7,1,1,4
2250 .BYT 4,5,1,1,5,1,1,4,4,5,1,2,6,1
2260 .BYT 1,3,3,3,1,1,2,1,1,3,3,3,1,0
2270 .BYT 7,1,1,1,4,4,1,1,5,1,1,1,4,4
2280 .BYT 1,2,6,1,1,3,3,3,1,1,2,1,1,3
2290 .BYT 3,3,1,0,7,1,1,1,4,4,1,1,5,1
2300 .BYT 1,1,4,4,1
2310 .END
2320 END
2330 INPUTA:PRINTPEEK(A+51456):GOTO2330